package arrAndstr;

/*
    删除有序数组中的重复项II

    给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使得出现次数超过两次的元素只出现两次 ，返回删除后数组的新长度。
    不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
 */
public class T80 {
    public static void main(String[] args) {
        int[] array = new int[]{0,0,1,1,1,1,2,3,3};

//        System.out.println(removeDuplicates(array));
//
//        for (int i : array) {
//            System.out.print(i + " ");
//        }

        // 利用排序
        int i = 0;
        for (int num : array) {
            if (i < 2 || num > array[i - 2]) {
                array[i++] = num;
            }
        }

        for (int i1 : array) {
            System.out.print(i1 + " ");
        }

        System.out.println(i);
    }

    public static int removeDuplicates(int[] nums) {
        int len = nums.length;
        if(len == 1) {
            return 1;
        }
        int firstValue = nums[0];
        int secondValue = nums[1];
        // 如果不符合条件，把当前元素冒泡冒上去
        for(int i=2; i<len; i++) {
            if(nums[i] < nums[i-1]) {
                return i;
            }
            int tempValue = nums[i];
            if(tempValue==firstValue && tempValue==secondValue) {
                if (isLastAll(nums, i)) {
                    return i;
                }
                for(int j=i; j<len-1; j++) {
                    swap(nums, j, j+1);
                }
                i--;
            } else {
                firstValue = nums[i-1];
                secondValue = nums[i];
            }
        }

        return len;
    }

    private static boolean isLastAll(int[] array, int index) {
        int value = array[index];
        int len = array.length;
        for (int i=index + 1; i<len; i++) {
            if (array[i] != value) {
                return false;
            }
        }

        return true;
    }

    public static void swap(int[] array, int i, int j) {
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}
